dotnetcore三大Redis客户端对比和使用心得 您所在的位置:网站首页 redis hash 性能对比 dotnetcore三大Redis客户端对比和使用心得

dotnetcore三大Redis客户端对比和使用心得

2023-08-19 11:45| 来源: 网络整理| 查看: 265

var redisDB = new CSRedisClient[16]; // 多客户端for (var a = 0; a < redisDB.Length; a++)  redisDB[a] = new CSRedisClient(Configuration.GetConnectionString("redis") + ",defaultDatabase=" + a);services.AddSingleton(redisDB); // ---------------------------- _redisDB[0].IncrByAsync("ProfileUsageCap", -1) _redisDB[0].HGetAsync(profileUsage, eqidPair.ProfileId.ToString()) _redisDB[0].HIncrByAsync(profileUsage, eqidPair.ProfileId.ToString(), -1);

 内置的静态操作类RedisHelper, 与Redis-Cli 命令完全一致, 故他能原生支持”blocking pops”。

// 实现后台服务,持续消费MQ消息 public class BackgroundJob : BackgroundService { private readonly CSRedisClient[] _redisDB; private readonly IConfiguration _conf; private readonly ILogger _logger; public BackgroundJob(CSRedisClient[] csRedisClients,IConfiguration conf,ILoggerFactory loggerFactory) { _redisDB = csRedisClients; _conf = conf; _logger = loggerFactory.CreateLogger(nameof(BackgroundJob)); } // Background 需要实现的后台任务 protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _redisDB[0] = new CSRedisClient(_conf.GetConnectionString("redis") + ",defualtDatabase=" + 0); RedisHelper.Initialization(_redisDB[0]); while (!stoppingToken.IsCancellationRequested) { var key = $"eqidpair:{DateTime.Now.ToString("yyyyMMdd")}"; // 阻塞式从右侧读取List首消息 var eqidpair = RedisHelper.BRPop(5, key); // TODO Handler Message else await Task.Delay(1000, stoppingToken); } } } -----RedisMQ 生产者--- // 将一个或多个msg插入List头部 RedisHelper.LPush(redisKey, eqidPairs.ToArray()); 简单有效RedisMQ Redis的一点小经验:

对自己要使用的Redis API 的时间复杂度心里要有数,尽量不要使用长时间运行的命令如keys *,可通过redis.io SlowLog命令观测 哪些命令耗费较长时间

Redis Key可按照“:”分隔定义成有业务意义的字符串,如NewUsers:201909:666666(某些Redis UI可直观友好查看该业务)

合适确定Key-Value的大小:Redis对于small value更友好, 如果值很大,考虑划分到多个key

关于缓存穿透,面试的时候会问,自行搜索布隆过滤器。

redis虽然有持久化机制,但在实际中会将key-value 持久化到关系型数据库,因为对于某些结构化查询,SQL更为有效。

 

----- 20190829 多说两句-------

以上三大客户端,Microsoft.Extensions.Caching.StackExchangeRedis 与其他两者的定位还是有很大差距的,单纯使用Redis 缓存特性, 有微软出品,必属精品情结的可使用此客户端;

StackExchange.Redis、CSRedisCore 对于Redis全功能特性支持的比较全,但是我也始终没有解决StackExchange.Redis : RedisTimeoutException 超时的问题,换成CSRedisCore 确实没有出现Redis相关异常。

---- 2019-09-25 update--------

- CSRedisCore 挖坑填坑经历

- 受到公号一些网友的启发,再次使用StackExchange.Redis , 并在redis配置中增加 abortConnect= false(缺省为true,表示不尝试重连),超时问题不再出现。  

 

https://azure.microsoft.com/en-us/blog/investigating-timeout-exceptions-in-stackexchange-redis-for-azure-redis-cache/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有